import { ref, reactive } from 'vue'
import { defineStore } from 'pinia';
import { api } from "@/services/api";
import { CommentItem } from '@/services/type';

export const SIZE = 10;

export const useCommentStore = defineStore('comment', () => {
    // 评论列表
    const commentList = reactive<CommentItem[]>([]);
    // 是否最后一页
    const isLast = ref(false);
    // 游标值
    const cursor = ref('');

    // 获取评论信息
    const getCommentList = async (data: {wznm?: string, type: number}, isInit: boolean) => {
        let pageSize = SIZE;
        if(isInit) {
            isInit = false;
            pageSize = 3;
            commentList.length = 0;
            isLast.value = false;
            cursor.value = '';
        }
        // 调用评论列表接口
        const response = await api.comment.getCommentList({
            // 文章内码
            wznm: data.wznm,
            // 文章内码
            type: data.type,        
            // 游标值
            cursor: cursor.value,
            // 分页数量
            pageSize
        });
        // 如果状态返回失败, 退出方法
        if(response.code !== 0) return; 
        // 结果赋值
        commentList.push(...response.data.list);
        // 是否最后一页
        isLast.value = response.data.isLast;
        // 游标值
        cursor.value = response.data.cursor;
    }

    // 获取评论回复列表信息
    const getReplyList = async (data: {wznm?: string, commentId: number, i: number}) => {
        // 评论数据加载中
        commentList[data.i].loading = true;
        // 调用评论回复列表接口
        const response = await api.comment.getReplyList({
            // 评论id
            commentId: data.commentId,
            // 文章内码
            wznm: data.wznm,
            // 游标值
            cursor: commentList[data.i].children[commentList[data.i].children.length - 1].comment_id,
            // 分页数量
            pageSize: 20
        });
        // 如果状态返回失败, 退出方法
        if(response.code !== 0) return; 
        // 评论数据加载结束
        commentList[data.i].loading = false;
        // 结果赋值
        commentList[data.i].children.push(...response.data.list);
    }
    
    return { 
        isLast, commentList, getCommentList, getReplyList
    }
});